package cn.educate.service;



import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 文件分类器，用于将指定目录中的文件根据文件扩展名移动到不同的子目录中。
 */
public class FileClassifier {
	// 使用Logger来记录日志
	private static final Logger LOGGER = Logger.getLogger(FileClassifier.class.getName());

	/**
	 * 根据文件扩展名将文件分类到不同的子目录中。
	 *
	 * @param sourceDir 源目录的路径
	 */
	public static void classifyFiles(String sourceDir) {
		// 创建源目录的File对象
		File dir = new File(sourceDir);

		// 检查源目录是否存在且是一个目录
		if (!dir.exists() || !dir.isDirectory()) {
			LOGGER.log(Level.SEVERE, "Invalid directory: " + sourceDir);
			return;
		}

		// 获取源目录中的所有文件和子目录
		File[] files = dir.listFiles();

		// 检查是否成功获取文件列表
		if (files != null) {
			// 遍历每个文件
			for (File file : files) {
				// 检查是否是文件（而非子目录）
				if (file.isFile()) {
					// 获取文件名
					String fileName = file.getName();

					// 查找文件名中的最后一个点，点后的内容即为文件扩展名
					int dotIndex = fileName.lastIndexOf('.');

					// 如果存在扩展名
					if (dotIndex > 0) {
						// 提取文件扩展名
						String extension = fileName.substring(dotIndex + 1);

						// 构建目标目录路径
						String targetDir = sourceDir + File.separator + extension + "Files";

						// 创建目标目录的File对象
						File target = new File(targetDir);

						// 如果目标目录不存在，则尝试创建
						if (!target.exists()) {
							if (!target.mkdirs()) {
								LOGGER.log(Level.SEVERE, "Failed to create directory: " + targetDir);
								continue;
							}
						}

						try {
							// 构建源文件的Path对象
							Path sourcePath = Paths.get(file.getAbsolutePath());

							// 构建目标文件的Path对象
							Path targetPath = Paths.get(targetDir + File.separator + fileName);

							// 将文件从源路径移动到目标路径
							Files.move(sourcePath, targetPath);
						} catch (IOException e) {
							// 记录移动文件时发生的IO异常
							LOGGER.log(Level.SEVERE, "Failed to move file: " + file.getAbsolutePath(), e);
						}
					}
				}
			}
		}
	}

	/**
	 * 主方法，程序的入口点。
	 *
	 * @param args 命令行参数（未使用）
	 */
	public static void main(String[] args) {
		// 使用环境变量或配置文件来指定文件路径
		String sourceDir = System.getenv("SOURCE_DIR");

		// 如果环境变量未设置，则使用本地默认路径（用于测试）
		if (sourceDir == null) {
			sourceDir = "D:\\image\\material1\\people"; // 本地默认路径（用于测试）
		}
		// 调用classifyFiles方法进行文件分类
		classifyFiles(sourceDir);
	}
}
